package evemanutool.utils.databases;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import evemanutool.constants.DBConstants;
import evemanutool.constants.UserPrefConstants;
import evemanutool.data.database.Blueprint;
import evemanutool.data.database.ManuQuote;
import evemanutool.data.display.MiningQuote;
import evemanutool.gui.main.EMT;
import evemanutool.prefs.Preferences;
import evemanutool.prefs.Preferences.BlueprintStat;
import evemanutool.prefs.Preferences.DefaultPriority;
import evemanutool.prefs.Preferences.MiningCycle;
import evemanutool.prefs.Preferences.MiningLasers;
import evemanutool.prefs.Preferences.MiningYield;
import evemanutool.utils.calc.MiningCalculator;
import evemanutool.utils.calc.QuoteCalculator;
import evemanutool.utils.datahandling.Database;
import evemanutool.utils.datahandling.DatabaseHandler.Stage;
public class QuoteDB extends Database implements DBConstants, UserPrefConstants {
//DB:s
private PriceDB pdb;
private BlueprintDB bdb;
private Preferences prefs;
private TechDB tdb;
private ItemDB idb;
//Data.
//BPO lists.
private volatile ArrayList<Blueprint> t1;
private volatile ArrayList<Blueprint> inv;
private volatile ArrayList<Blueprint> rev;
//Manufacturing.
private volatile ArrayList<ManuQuote> manuL;
private volatile ArrayList<ManuQuote> invL;
private volatile ArrayList<ManuQuote> revL;
//Mining.
private volatile ArrayList<MiningQuote> oreL;
private volatile ArrayList<MiningQuote> iceL;
public QuoteDB() {
super(false, false, Stage.COMPUTE, null);
}
public void init(PriceDB pdb, BlueprintDB bdb, TechDB tdb, ItemDB idb, Preferences prefs) {
this.pdb = pdb;
this.bdb = bdb;
this.tdb = tdb;
this.idb = idb;
this.prefs = prefs;
}
@Override
public synchronized void processData() throws Exception {
//Temporary.
ArrayList<Blueprint> tmpT1 = new ArrayList<>();
ArrayList<Blueprint> tmpInv = new ArrayList<>();
ArrayList<Blueprint> tmpRev = new ArrayList<>();
//Divide into groups.
for (Blueprint b : bdb.getCompleteList()) {
//Set default me and pe levels.
b.setMe(prefs.getBlueprintStat(BlueprintStat.MOD_ME));
b.setPe(prefs.getBlueprintStat(BlueprintStat.MOD_PE));
if (tdb.canBeInvented(b, bdb)) {
//Create list with invention blueprints.
tmpInv.add(b);
}else if (tdb.canBeReverseEngineered(b)) {
//Create list with reverse engineering blueprints.
tmpRev.add(b);
}else {
tmpT1.add(b);
}
}
//Set new database to global reference.
t1 = tmpT1;
inv = tmpInv;
rev = tmpRev;
}
@Override
public synchronized void computeData() throws Exception {
//Manufacturing.
manuL = QuoteCalculator.calculateQuotes(t1, 1, pdb, bdb, prefs,
MAT_ACQUIRE_PRIO_ENUM[prefs.getDefaultPriorityIndex(DefaultPriority.MAT_CALC)]);
invL = QuoteCalculator.calculateInventionQuotes(inv, 1, pdb, tdb, bdb, prefs,
INV_PRIO_ENUM[prefs.getDefaultPriorityIndex(DefaultPriority.INV_CALC)],
MAT_ACQUIRE_PRIO_ENUM[prefs.getDefaultPriorityIndex(DefaultPriority.MAT_CALC)]);
revL = QuoteCalculator.calculateReverseEngineeringQuotes(rev, 1, pdb, bdb, idb, prefs,
REV_PRIO_ENUM[prefs.getDefaultPriorityIndex(DefaultPriority.REV_CALC)],
MAT_ACQUIRE_PRIO_ENUM[prefs.getDefaultPriorityIndex(DefaultPriority.MAT_CALC)]);
//Mining.
oreL = MiningCalculator.calculateMiningQuotes(prefs, pdb,
idb.getItems(Arrays.asList(ORE_TYPEID)),
prefs.getMiningYield(MiningYield.ORE), prefs.getMiningCycle(MiningCycle.ORE), prefs.getMiningLasers(MiningLasers.ORE));
iceL = MiningCalculator.calculateMiningQuotes(prefs, pdb,
idb.getItems(Arrays.asList(ICE_TYPEID)),
ICE_LASER_YIELD_PER_CYCLE, prefs.getMiningCycle(MiningCycle.ICE), prefs.getMiningLasers(MiningLasers.ICE));
//Show message.
EMT.M_HANDLER.addMessage("Manufacturing results for " + (t1.size() + inv.size() + rev.size()) + " blueprints computed.");
//Last initiation step, set complete.
super.setComplete(true);
}
public Collection<ManuQuote> getManuQuotes(QuoteType qT) {
//Return the right quotelist.
//Will return null if type is wrong or DB uninitiated.
if (qT == QuoteType.T1) {
return manuL;
} else if (qT == QuoteType.INV) {
return invL;
} else if (qT == QuoteType.REV) {
return revL;
}
return null;
}
public Collection<MiningQuote> getMiningQuotes(QuoteType qT) {
//Return the right quotelist.
//Will return null if type is wrong or DB uninitiated.
if (qT == QuoteType.ORE) {
return oreL;
} else if (qT == QuoteType.ICE) {
return iceL;
}
return null;
}
}